home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 051-060 / amok58 / stack&queue / teststack.mod < prev   
Encoding:
Text File  |  1993-11-04  |  1.3 KB  |  66 lines

  1. (*
  2.  
  3.   This is just a quick hack to check the *NEW* Stack ADT.
  4.   Written by P.Fröhlich 03-Sep-1991.
  5.   Removed SYSTEM dependency [phf] 08-Sep-1991.
  6.  
  7.   This example shows how to deal with type-extension.
  8.  
  9. *)
  10.  
  11. MODULE TestStack;
  12.  
  13. IMPORT
  14.   st : Stack,
  15. (*       NoGuru,
  16.        Break,*)
  17.   io : termio; (* same as io, has all workbench stuff removed *)
  18.  
  19. TYPE
  20.   MyElement = POINTER TO MyElementObject;
  21.  
  22.   MyElementObject = RECORD (st.ElementObject);
  23.     int : INTEGER;
  24.       c : CHAR;
  25.       l : LONGINT;
  26.   END;
  27.  
  28. VAR
  29.   i : INTEGER;
  30.   myStack : st.Stack;
  31.   myElement : MyElement; (* we need this for creation only *)
  32.   element : st.Element;
  33.  
  34. BEGIN
  35.   st.Create(myStack);
  36.   IF (myStack # NIL) THEN
  37.     i := 0;
  38.  
  39.     WHILE (i < 20) DO
  40.       NEW(myElement);
  41.       myElement.int := i;
  42.       myElement.c   := CHR(i+65);
  43.       myElement.l   := i * i;
  44.       st.Push(myStack,myElement);
  45.       INC(i);
  46.     END;
  47.  
  48.     WHILE NOT st.Empty(myStack) DO
  49.       element := st.Pop(myStack);
  50.       IF (element IS MyElement) THEN
  51.         WITH element : MyElement DO
  52.           io.WriteInt(element.int,10); io.WriteString("  ");
  53.           io.Write(element.c);
  54.           io.WriteInt(element.l,10);
  55.         END;
  56.       ELSE  
  57.         io.WriteString("Illegal stack content!\n");
  58.       END;
  59.       io.WriteLn;
  60.       DISPOSE(element);
  61.     END;
  62.   END;
  63. CLOSE
  64.   IF (myStack # NIL) THEN st.Discard(myStack) END;
  65. END TestStack.
  66.